 package srdb.migration.dbhandler.enterprisedb;
 
    import com.edb.util.PGInterval;

    import srdb.migration.common.IMTKConnection;
import srdb.migration.common.MTKConstants;
    import srdb.migration.dbhandler.srdb.SRDBBridge;
    import srdb.migration.schema.metadata.Table;
 
 public class NZBridge extends SRDBBridge
 {
   public NZBridge(IMTKConnection srcConn, IMTKConnection targetConn)
   {
     super(srcConn, targetConn);
   }
 
   public long setTableData(Table table, int batchSize, MTKConstants.DATABASE_TYPE sourceDBType, MTKConstants.DATABASE_TYPE targetDBType) throws Exception
   {
	return 0; // N/A
//     this.lastMigratedDataSize = 0L;
//     long committedRowCount = 0L;
//     boolean lastBatchFailure = false;
//     PreparedStatement insertStmt = null;
//     Statement sourceStmt = null;
//     Statement destStmt = null;
//     ResultSet rs = null;
//     String insertStr = "";
//     File f = null;
//     FileOutputStream fos = null;
//     FileInputStream fis = null;
// 
//     FileInputStream[] arrFis = new FileInputStream[table.getLargeObjectsColumnCount()];
//     BufferedReader[] arrBr = new BufferedReader[table.getCLOBColumnCount()];
//     int fisIndex = 0;
//     int brIndex = 0;
//     for (int i = 0; i < arrFis.length; i++) {
//       arrFis[i] = null;
//     }
// 
//     for (int i = 0; i < arrBr.length; i++) {
//       arrBr[i] = null;
//     }
// 
//     int j = 0;
// 
//     String fileNamePrefix = Utility.getValidFileNamePrefixFor(table.getParentSchema().getName(), table.getName());
//     try {
//       this.targetConn.getConnection().setAutoCommit(false);
//       insertStr = "INSERT INTO " + table.getTargetSchemaQualifiedName() + " VALUES (";
//       for (int i = 0; i < table.getColumns().size(); i++) {
//         insertStr = insertStr + "?";
//         if (i < table.getColumns().size() - 1)
//           insertStr = insertStr + ", ";
//       }
//       insertStr = insertStr + ");";
//       insertStmt = this.targetConn.getConnection().prepareStatement(insertStr);
// 
//       destStmt = this.targetConn.getConnection().createStatement();
// 
//       if ((table.isPartitioned()) && (!MigrationToolkit.isMemberOfPartitionTableList(table)))
//         destStmt.execute("DELETE FROM " + table.getTargetSchemaFullyQualifiedName(MTKConstants.DATABASE_TYPE.ORACLE, MTKConstants.DATABASE_TYPE.ENTERPRISEDB, false));
//       else {
//         destStmt.execute("TRUNCATE TABLE " + table.getTargetSchemaFullyQualifiedName(MTKConstants.DATABASE_TYPE.ORACLE, MTKConstants.DATABASE_TYPE.ENTERPRISEDB, false));
//       }
// 
//       destStmt.execute("update pg_catalog.pg_class set relhasindex = 'f' where oid = '" + table.getTargetSchemaFullyQualifiedName(MTKConstants.DATABASE_TYPE.ORACLE, MTKConstants.DATABASE_TYPE.ENTERPRISEDB, true) + "'::pg_catalog.regclass");
// 
//       this.targetConn.commit();
// 
//       sourceStmt = this.srcConn.getConnection().createStatement();
//       rs = sourceStmt.executeQuery(table.getSelectSQL());
// 
//       while (rs.next()) {
//         for (int i = 0; i < table.getColumns().size(); i++) {
//           Column column = table.getColumns().get(i);
// 
//           switch (1.$SwitchMap$com$edb$schema$metadata$Column$DataType[table.getColumns().get(i).getDataType().ordinal()])
//           {
//           case 1:
//           case 2:
//           case 3:
//           case 4:
//             if ((column.isClob()) || (column.isNClob()))
//             {
//               CLOB clob = ((OracleResultSet)rs).getCLOB(i + 1);
// 
//               if (clob != null)
//               {
//                 long clobLength = clob.length();
//                 this.lastMigratedDataSize += clobLength;
// 
//                 Reader creader = clob.getCharacterStream();
// 
//                 int size = clob.getBufferSize();
//                 char[] buffer = new char[size];
// 
//                 File clobFile = new File(Utility.getTempPath() + "mtk_clobdata" + "_" + fileNamePrefix + brIndex);
//                 BufferedWriter cbw = new BufferedWriter(new FileWriter(clobFile));
//                 int length = -1;
// 
//                 while ((length = creader.read(buffer)) != -1) {
//                   cbw.write(buffer, 0, length);
//                 }
// 
//                 creader.close();
//                 cbw.close();
// 
//                 if (clobLength > 0L) {
//                   arrBr[brIndex] = new BufferedReader(new FileReader(clobFile));
//                   insertStmt.setCharacterStream(i + 1, arrBr[(brIndex++)], (int)clobFile.length());
//                 } else {
//                   insertStmt.setNull(i + 1, 2005);
//                 }
//               } else {
//                 insertStmt.setNull(i + 1, 2005);
//               }
// 
//             }
//             else if (MigrationToolkit.replaceNullChar()) {
//               String colValue = rs.getString(i + 1);
//               if (colValue != null) {
//                 colValue = colValue.replaceAll("", String.valueOf(MigrationToolkit.nullReplacementChar()));
//                 insertStmt.setString(i + 1, colValue);
//               }
//             }
//             else {
//               insertStmt.setString(i + 1, rs.getString(i + 1));
//             }
// 
//             break;
//           case 5:
//             if (rs.getObject(i + 1) != null)
//               insertStmt.setDouble(i + 1, rs.getDouble(i + 1));
//             else {
//               insertStmt.setNull(i + 1, 6);
//             }
// 
//             break;
//           case 6:
//           case 7:
//             Object objVal = rs.getObject(i + 1);
// 
//             if (column.isReal()) {
//               if (objVal != null)
//                 insertStmt.setFloat(i + 1, rs.getFloat(i + 1));
//               else
//                 insertStmt.setNull(i + 1, 6);
//             }
//             else if (column.isDouble()) {
//               if (objVal != null)
//                 insertStmt.setDouble(i + 1, rs.getFloat(i + 1));
//               else {
//                 insertStmt.setNull(i + 1, 8);
//               }
//             }
//             else if (objVal != null)
//               insertStmt.setBigDecimal(i + 1, rs.getBigDecimal(i + 1));
//             else {
//               insertStmt.setNull(i + 1, 2);
//             }
// 
//             break;
//           case 8:
//           case 9:
//             insertStmt.setTimestamp(i + 1, rs.getTimestamp(i + 1));
//             break;
//           case 10:
//             if (column.isBlob())
//             {
//               BLOB blob = ((OracleResultSet)rs).getBLOB(i + 1);
// 
//               if (blob != null)
//               {
//                 long blobLength = blob.length();
//                 this.lastMigratedDataSize += blobLength;
// 
//                 InputStream bis = blob.getBinaryStream();
// 
//                 int size = blob.getBufferSize();
//                 byte[] buffer = new byte[size];
// 
//                 File blobFile = new File(Utility.getTempPath() + "mtk_blobdata" + "_" + fileNamePrefix + fisIndex);
//                 FileOutputStream bos = new FileOutputStream(blobFile);
//                 int length = -1;
// 
//                 while ((length = bis.read(buffer)) != -1) {
//                   bos.write(buffer, 0, length);
//                 }
// 
//                 bis.close();
//                 bos.close();
// 
//                 if (blobLength > 0L) {
//                   arrFis[fisIndex] = new FileInputStream(blobFile);
//                   insertStmt.setBinaryStream(i + 1, arrFis[(fisIndex++)], (int)blobFile.length());
//                 } else {
//                   insertStmt.setNull(i + 1, -2);
//                 }
//               } else {
//                 insertStmt.setNull(i + 1, -2);
//               }
//             }
//             else
//             {
//               byte[] b = rs.getBytes(i + 1);
//               if (b != null) {
//                 this.lastMigratedDataSize += b.length;
//                 f = new File(Utility.getTempPath() + "mtk_blobdata" + "_" + fileNamePrefix + fisIndex);
//                 fos = new FileOutputStream(f);
//                 fos.write(b);
//                 fos.close();
//                 arrFis[fisIndex] = new FileInputStream(f);
//                 insertStmt.setBinaryStream(i + 1, arrFis[(fisIndex++)], (int)f.length());
//               } else {
//                 insertStmt.setNull(i + 1, -2);
//               }
//             }
//             break;
//           case 11:
//             PGInterval pgInterval = null;
//             String intervalValue = rs.getString(i + 1);
// 
//             if (intervalValue != null) {
//               pgInterval = convertToPGIntervalFormat(intervalValue);
// 
//               this.lastMigratedDataSize += pgInterval.toString().getBytes().length;
//             }
// 
//             insertStmt.setObject(i + 1, pgInterval);
// 
//             break;
//           default:
//             throw new Exception("Invalid DataType");
//           }
//         }
//         insertStmt.addBatch();
//         j++;
//         if (j % batchSize != 0)
//           continue;
//         try {
//           insertStmt.executeBatch();
//           lastBatchFailure = false;
//           Utility.getLogger().info("[" + table.getName() + "] " + ResourceHandler.getValue("INFO_MIGRATED_ROWS", new Object[] { Integer.valueOf(j) }));
//         }
//         catch (Exception ex) {
//           Utility.getLogger().warn(ex.getMessage() + ", Skipping Batch");
//           Utility.getLogger().error("Stack Trace:", ex);
//           MigrationToolkit.incrementFailureCount();
//           table.incrementBatchFailureCount();
//           lastBatchFailure = true;
//         }
//         insertStmt.clearBatch();
//         this.targetConn.commit();
// 
//         if (!lastBatchFailure) {
//           committedRowCount += batchSize;
//         }
// 
//         for (int i = 0; i < arrFis.length; i++) {
//           if (arrFis[i] != null) {
//             arrFis[i].close();
//             new File(Utility.getTempPath() + "mtk_blobdata" + "_" + fileNamePrefix + i).delete();
//             arrFis[i] = null;
//           }
// 
//         }
// 
//         for (int i = 0; i < arrBr.length; i++) {
//           if (arrBr[i] != null) {
//             arrBr[i].close();
//             new File(Utility.getTempPath() + "mtk_clobdata" + "_" + fileNamePrefix + i).delete();
//             arrBr[i] = null;
//           }
//         }
// 
//         fisIndex = 0;
//         brIndex = 0;
//       }
// 
//       int[] lastBatchCmdCount = null;
//       try
//       {
//         lastBatchCmdCount = insertStmt.executeBatch();
//         lastBatchFailure = false;
// 
//         if (lastBatchCmdCount.length > 0) {
//           committedRowCount += j % batchSize;
//           Utility.getLogger().info("[" + table.getName() + "] " + ResourceHandler.getValue("INFO_MIGRATED_ROWS", new Object[] { Long.valueOf(committedRowCount) }));
//         }
//       }
//       catch (Exception ex)
//       {
//         Utility.getLogger().warn(ex.getMessage() + ", Skipping Batch");
//         Utility.getLogger().error("Stack Trace:", ex);
//         MigrationToolkit.incrementFailureCount();
//         table.incrementBatchFailureCount();
//         lastBatchFailure = true;
//       }
//       insertStmt.clearBatch();
//       this.targetConn.commit();
// 
//       for (int i = 0; i < arrFis.length; i++) {
//         if (arrFis[i] != null) {
//           arrFis[i].close();
//           new File(Utility.getTempPath() + "mtk_blobdata" + "_" + fileNamePrefix + i).delete();
//         }
// 
//       }
// 
//       for (int i = 0; i < arrBr.length; i++) {
//         if (arrBr[i] != null) {
//           arrBr[i].close();
//           new File(Utility.getTempPath() + "mtk_clobdata" + "_" + fileNamePrefix + i).delete();
//         }
//       }
// 
//     }
//     catch (SQLException sqle)
//     {
//       this.targetConn.rollback();
//       throw (sqle.getNextException() != null ? sqle.getNextException() : sqle);
//     } catch (Exception ex) {
//       this.targetConn.rollback();
//       throw ex;
//     } finally {
//       this.targetConn.getConnection().setAutoCommit(true);
// 
//       if (insertStmt != null) {
//         insertStmt.close();
//       }
// 
//       if (destStmt != null) {
//         destStmt.close();
//       }
// 
//       if (rs != null) {
//         rs.close();
//       }
// 
//       if (sourceStmt != null) {
//         sourceStmt.close();
//       }
//     }
//     return committedRowCount;
   }
 
   public long setTableDataInSafeMode(Table table, MTKConstants.DATABASE_TYPE sourceDBType, MTKConstants.DATABASE_TYPE targetDBType) throws Exception
   { //N/A
	return 0;
//     Statement insertStmt = null;
//     Statement sourceStmt = null;
//     Statement destStmt = null;
//     ResultSet rs = null;
//     StringBuffer insertColStr = new StringBuffer();
//     StringBuffer insertStr = new StringBuffer();
//     try
//     {
//       insertColStr.append("INSERT INTO ").append(table.getTargetSchemaQualifiedName()).append(" VALUES (");
// 
//       insertStmt = this.targetConn.getConnection().createStatement();
//       destStmt = this.targetConn.getConnection().createStatement();
//       destStmt.execute("TRUNCATE TABLE " + table.getTargetSchemaQualifiedName());
// 
//       sourceStmt = this.srcConn.getConnection().createStatement();
//       rs = sourceStmt.executeQuery(table.getSelectSQL());
// 
//       int rowCount = 0;
//       while (rs.next()) {
//         insertStr.setLength(0);
//         insertStr.append(insertColStr);
// 
//         for (i = 0; i < table.getColumns().size(); i++) {
//           if (i > 0) {
//             insertStr.append(", ");
//           }
// 
//           if (rs.getObject(i + 1) == null) {
//             insertStr.append("null");
//           }
//           else {
//             switch (1.$SwitchMap$com$edb$schema$metadata$Column$DataType[table.getColumns().get(i).getDataType().ordinal()]) {
//             case 1:
//             case 2:
//             case 3:
//             case 4:
//               insertStr.append("'").append(rs.getString(i + 1)).append("'");
//               break;
//             case 5:
//             case 6:
//             case 7:
//               insertStr.append(rs.getBigDecimal(i + 1));
//               break;
//             case 8:
//               insertStr.append("'").append(rs.getDate(i + 1)).append("'");
//               break;
//             case 12:
//               insertStr.append("'").append(rs.getTime(i + 1)).append("'");
//               break;
//             case 9:
//               insertStr.append("'").append(rs.getTimestamp(i + 1)).append("'");
//               break;
//             case 10:
//               insertStr.append("null");
//               break;
//             case 11:
//               insertStr.append("'").append(rs.getString(i + 1)).append("'");
//               break;
//             default:
//               throw new Exception("Invalid DataType");
//             }
//           }
//         }
//         insertStr.append(")");
//         insertStmt.executeUpdate(insertStr.toString());
// 
//         rowCount++;
//       }
// 
//       i = rowCount;
//     }
//     finally
//     {
//       int i;
//       if (insertStmt != null) {
//         insertStmt.close();
//       }
// 
//       if (destStmt != null) {
//         destStmt.close();
//       }
// 
//       if (rs != null) {
//         rs.close();
//       }
// 
//       if (sourceStmt != null)
//         sourceStmt.close();
//     }
   }
 
   private PGInterval convertToPGIntervalFormat(String intervalValue)
   {
     PGInterval interval = null;
 
     if ((intervalValue.indexOf('-') >= 0) && (!intervalValue.contains(":"))) {
       String[] yearMonthParts = intervalValue.split("-");
       double second = 0.0D;
 
       interval = new PGInterval(Integer.parseInt(yearMonthParts[0]), Integer.parseInt(yearMonthParts[1]), 0, 0, 0, second);
     }
     else if (intervalValue.contains(":")) {
       String[] daySecondParts = intervalValue.split(":");
 
       String day = daySecondParts[0].split(" ")[0];
       String hour = daySecondParts[0].split(" ")[1];
       String min = daySecondParts[1];
       String sec = daySecondParts[2].substring(0, daySecondParts[2].indexOf("."));
       String miliSec = daySecondParts[2].substring(daySecondParts[2].indexOf(".") + 1);
       double roundedSeconds = 0.0D;
 
       if (miliSec.startsWith("-")) {
         roundedSeconds = Double.parseDouble("-." + miliSec.substring(1)) / 1000.0D;
         roundedSeconds = Double.parseDouble(sec) + roundedSeconds;
       } else {
         roundedSeconds = Double.parseDouble(daySecondParts[2]);
       }
 
       interval = new PGInterval(0, 0, Integer.parseInt(day), Integer.parseInt(hour), Integer.parseInt(min), roundedSeconds);
     }
 
     return interval;
   }
 }

/* 

 * 
 */